#!/usr/bin/enr/python3
# -*- coding: utf-8 -*-
# -------------------------------
# @Author : hurong
# @File : 03_tuple_demo.py
# @Time : 2023/6/21 15:32
# -------------------------------

""" 元组的使用：创建"""
# 1. 直接使用逗号分割.<class 'tuple'> (1, 2, 3, 4, 5)
tup1 = 1, 2, 3, 4, 5
print(type(tup1), tup1)
# 2. 通过小括号填充元素.<class 'tuple'> (1, 2, 3, 4, 5)
tup2 = (1, 2, 3, 4, 5)
print(type(tup2), tup2)
# 3.通过构造函数tuple(iterable).<class 'tuple'> ()
tup3 = tuple()
print(type(tup3),tup3)
tup4 = tuple('python')
# <class 'tuple'> ('p', 'y', 't', 'h', 'o', 'n')
print(type(tup4), tup4)

tup5 = tuple([1,2,3,4,5,6])
# <class 'tuple'> (1, 2, 3, 4, 5, 6)
print(type(tup5), tup5)

# 4. 注意：单元素元组，逗号不可或缺
tup6 = 1
# <class 'int'> 1
print(type(tup6),tup6)
tup7 = 1,
# <class 'tuple'> (1,)
print(type(tup7), tup7)
tup8 = (1,)
# <class 'tuple'> (1,)
print(type(tup8),tup8)

"""
元组的索引，与列表同法
"""
# 元组索引，正向索引和反向索引
tup9 =['python','hello']
print("正向索引：", tup9[0])
print("反向索引：",tup9[-1])

"""元组的切片"""
# 1. [start:stop:step]
tup10 = tuple('hogworts')
# ('h', 'o', 'g', 'w', 'o', 'r', 't', 's')
print(tup10)
# ('h', 'g', 'o', 't')
print(tup10[0::2])
# 反转的元组---('s', 't', 'r', 'o', 'w', 'g', 'o', 'h')
print(tup10[::-1])

"""元组不可变，不支持新增修改和删除"""
"""元组常用方法：index()，count()"""
tup11 = tuple('hello, world')
# 1. index(item),找到第一个符合条件的值就输出并结束。
print(tup11.index('o'))     # 4
# 传入的目标元素不存在则会报错...
# ValueError: tuple.index(x): x not in tuple
# print(tup11.index('x'))
# 2.count(item)
print(tup11.count('o'))     # 2

"""元组解包：把一个可迭代对象里的元素，
一并赋值到由对应的变量组成的元组中"""
# 传统方法一
t = (1, 2, 3)
a = t[0]
b = t[1]
c = t[2]
print(a,b,c)        # 1 2 3

# 元组解包
a,b,c = (1,2,3)
print(a,b,c)         # 1 2 3

"""
元组和列表的区别
同：
1. 都是有序的；2.都是以勾的，能够包涵不同类型的对象；3. 都支持切片和索引。
异：
1. 声明方式不同，元组使用(),列表使用[];列表可变，元组不可变的。
"""

